// const CompressionPlugin = require('compression-webpack-plugin')
// const TerserPlugin = require("terser-webpack-plugin");
const child_process = require('child_process');
const fs = require('fs');
const os = require('os');
const path = require('path');

const isProd = process.env.NODE_ENV === 'production'

module.exports = {
    // publicPath: isProd ? '/visual-drag-demo/' : './',
    publicPath: './',
    outputDir: '../plugin/html/',
    assetsDir: './assets/',
    indexPath: "index.html",

    configureWebpack: (config) => {

        //  引入uglifyjs-webpack-plugin
        let UglifyPlugin = require('uglifyjs-webpack-plugin');

        if (process.env.NODE_ENV == 'production') {
            // 为生产环境修改配置
            config.mode = 'production'
            // 将每个依赖包打包成单独的js文件
            let optimization = {
                minimizer: [new UglifyPlugin({
                    uglifyOptions: {
                        warnings: false,
                        compress: {
                            drop_console: true,
                            drop_debugger: false,
                            pure_funcs: ['console.log']
                        }
                    }
                })]
            }
            Object.assign(config, {
                optimization
            })
        } else {
            // 为开发环境修改配置
            config.mode = 'development'
        }

        // config.optimization = {
        //     minimizer: [
        //         new TerserPlugin({
        //             terserOptions: {
        //                 format: {
        //                     comments: false,
        //                 },
        //                 ecma: undefined,
        //                 warnings: false,
        //                 parse: {},
        //                 compress: {
        //                     drop_console: true,
        //                     drop_debugger: false,
        //                     pure_funcs: ['console.log'] // 移除console
        //                 }
        //             },
        //             extractComments: false,
        //         }),
        //     ]
        // }
        // 打包ncc
        if (process.env.NODE_ENV === 'production') {
            console.log('ncc资源打包')
            child_process.exec('ncc build ../ncc_pkg/mysql/index.js -m -o ../plugin/nccPkg/mysql/', function (error, stdout, stderr) {
                // child_process.exec('ncc build ./index.js -m -o ./dist ',{cwd: '../ncc_pkg/mysql'}, function (error, stdout, stderr) {
                if (error !== null) {
                    console.log('exec error: ' + error);
                }
            });
        }


        function writeFile(fileName, arr) {
            let text = '';
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] == '') {
                    continue;
                }
                if (i != arr.length - 1) {
                    text += arr[i] + os.EOL;

                } else {
                    text += arr[i];

                }
            }
            fs.writeFileSync(fileName, text);
        }

        const preloadPath = path.join(__dirname, '../plugin/preload.js')
        const preloadData = fs.readFileSync(preloadPath, 'UTF-8')
        const preloadLines = preloadData.split(/\r?\n/)
        if (process.env.NODE_ENV !== 'production') {
            preloadLines.forEach((line, i) => {
                if (line.indexOf('./html/index.html') != -1) {
                    preloadLines[i] = '"../code/vue_test.html",'
                }

                if (line.indexOf('//window.ubWindow.webContents.openDevTools();') != -1) {
                    preloadLines[i] = 'window.ubWindow.webContents.openDevTools();'
                }

            })
        } else {
            preloadLines.forEach((line, i) => {
                if (line.indexOf('../code/vue_test.html') != -1) {
                    preloadLines[i] = '"./html/index.html",'
                }
                if (line.indexOf('window.ubWindow.webContents.openDevTools();') != -1) {
                    preloadLines[i] = '//window.ubWindow.webContents.openDevTools();'
                }


            })
        }

        writeFile(preloadPath, preloadLines)


        // gzip压缩文件
        // if (isProd) {
        //     return {
        //         plugins: [
        //             new CompressionPlugin({
        //                 test: /\.js$|\.html$|\.css$|\.jpg$|\.jpeg$|\.png/, // 需要压缩的文件类型
        //                 threshold: 10240, // 归档需要进行压缩的文件大小最小值，这个对 10K 以上的进行压缩
        //                 deleteOriginalAssets: true, // 是否删除原文件
        //             }),
        //         ],
        //     }
        // }
    },
    pages: {
        index: {
            // page 的入口
            entry: 'src/main.js',
            // 模板来源
            template: 'public/index.html',
            // 在 dist/index.html 的输出
            filename: 'index.html',
            // 当使用 title 选项时，
            // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
            // title: 'Index Page',
            title: '码农专用sql工具',
            // 在这个页面中包含的块，默认情况下会包含
            // 提取出来的通用 chunk 和 vendor chunk。
            // chunks: ['chunk-vendors', 'chunk-common', 'index'],
        },
        // dev: {
        //     // page 的入口
        //     entry: 'src/main.js',
        //     // 模板来源
        //     template: 'public/Yl.html',
        //     // 在 dist/index.html 的输出
        //     filename: 'Yl.html',
        //     // 当使用 title 选项时，
        //     // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
        //     title: 'Index Page',
        //     // 在这个页面中包含的块，默认情况下会包含
        //     // 提取出来的通用 chunk 和 vendor chunk。
        //     // chunks: ['chunk-vendors', 'chunk-common', 'index'],
        // },
    },

    pluginOptions: {
        'style-resources-loader': {
            preProcessor: 'stylus',
            patterns: [],
        },
        electronBuilder: {
            nodeIntegration: true,
        }
    },
    runtimeCompiler: true,
    lintOnSave: false,

    productionSourceMap: process.env.NODE_ENV === 'production' ? false : true,
    // 可以用来传递任何第三方插件选项




}
